# -*- mode: org; org-confirm-babel-evaluate: nil; -*-

# Construir tabelas de selecionados por disciplinas: para cada matéria no dia especificado, ordena e lista os acadêmicos.
# Copyright (c) 2018 Adonay Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno>

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.

# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see
# <https://www.gnu.org/licenses/>.

# Comentário:

# Para editar este documento não é necessário ferramenta especial.
# Porém, para exportá-lo, é necessário um conversor que entenda
# marcações em modo Org, como é o caso do editor de textos GNU Emacs.

# Além disso, para a exportação, assume-se que se pretende fazer um
# .txt e que sua cópia do GNU Emacs reconhece a existência de uma
# cópia do GNU R através do modo ESS, do modo Org (org-mode), e dos
# pacotes Org Babel (ob), Org Babel Emacs Lisp (ob-emacs-lisp), Org
# Babel R (ob-R), todos os quais são componentes padrão no GNU Emacs,
# exceto o GNU R. Consulte a documentação do Org Babel para
# saber como habilitar a interpretação da linguagem R no GNU Emacs.

#+LANGUAGE: pt-BR

# Retira informações para economizar espaço.
#+OPTIONS: author:nil date:nil title:nil toc:nil

# Lê o arquivo contendo a lista de acadêmicos sorteados. Mantém a
# sessão do GNU R aberta.
#+BEGIN_SRC R :exports none :session
  academicos <- read.csv("Academicos.csv",
			 check.names = FALSE,
			 na.strings = "")
#+END_SRC

# Retorna as disciplinas do dia informado, ou do atual, às quais os
# acadêmicos sorteados estão frequentando. Usa-se da sessão já aberta.
#+NAME: disciplinas
#+BEGIN_SRC R :exports none :results list :session :var dia=""
    if(! isTRUE(which(dia == c("segunda", "terça", "quarta", "quinta", "sexta")) > 0)) {
    dia <- weekdays(as.Date(Sys.Date()))}

    levels(factor(academicos[! is.na(academicos$"Situação na pesquisa") & academicos$"Situação na pesquisa" == "Selecionado",
			     dia]))
#+END_SRC

# Para cada disciplina, escreve um "invocador" responsável por usar a
# sessão do GNU R já aberta e retornar uma tabela com o nome dos
# acadêmicos que frequentam cada disciplina.
#+NAME: preparar-tabelas
#+BEGIN_SRC emacs-lisp :exports results :results raw :var disciplinas=disciplinas
    (mapconcat (lambda (x)
                 (concat "#+NAME: tabela-"
                         (replace-regexp-in-string "[^[:alnum:]]" "-" x)
                         "\n"
                         "#+BEGIN_SRC R :colnames yes :exports results :session\n"
                         "tabela <- data.frame(unique(sort(academicos[eval(parse(text=paste('! is.na(academicos$\"Situação na pesquisa\") & academicos$\"Situação na pesquisa\" == \"Selecionado\" & ! is.na(academicos$\"', dia, '\") & academicos$\"', dia, '\" == \""
                         x
                         "\"', sep=\"\"))), \"Nome\"])))\n"
                         "colnames(tabela) <- c(\""
                         x
                         "\")\n"
                         "tabela\n"
                         "#+END_SRC\n\n"
                         "#+RESULTS: tabela-"
                         (replace-regexp-in-string "[^[:alnum:]]" "-" x)))
               (mapcar 'car disciplinas)
               "\n\n")
#+END_SRC
